<?php

namespace app\index\service\payments;

use app\common\model\Trade;

/**
 * 支付接口
 * PaymentInterface
 */
interface PaymentInterface
{
    /**
     * 预下单，保存三方订单信息，组装前端支付参数，让前端发起支付
     * @param Trade $trade
     * @param bool $arrears 本次支付是否允许欠费
     * @return array
     */
    public function pay(Trade $trade, bool $arrears = false): array;

    /**
     * 取消预下单，防止重复支付
     * @param Trade $trade
     * @return void
     */
    public function cancelPay(Trade $trade): void;

    /**
     * 退款
     * @param Trade $trade
     * @return bool
     */
    public function refund(Trade $trade): bool;

    /**
     * 主动查询支付结果
     * @param Trade $trade
     * @return void
     */
    public function query(Trade $trade): void;
}
